<template>
	<view class="contract-details">
		<view class="paste">
			<uni-easyinput type="textarea" autoHeight v-model="templateText" placeholder="请输粘贴或输入文本，点击 “粘贴并识别” 自动识别"
				:maxlength="-1" />
			<view class="btns">
				<button type="primary" @click="copyTemplate" size="mini"
					style="margin-right: 20rpx;background-color: #409Eff">复制模板</button>
				<button type="primary" @click="pasteAndRecognize" size="mini"
					style="background-color: #409Eff;">粘贴并识别</button>
			</view>
		</view>

		<uni-section title="合同信息" type="line">
			<view class="form">
				<uni-forms ref="valiForm" :modelValue="dataForm" label-position="top" :rules="rules">
					<uni-forms-item :label="item.componentName" :name="item.componentType" :label-width="300" required
						v-for="(item, index) in dataForm.components" :key="item.componentId">

						<uni-easyinput v-if="item.componentType != '11'"
							v-model="dataForm.components[index].componentValue"
							:placeholder="`请输入${item.componentName}`" @blur="inputItem(_, item)" />



						<up-upload :fileList="fileList" @afterRead="afterRead" @delete="deletePic" name="3" v-else
							:maxCount="1" :previewFullImage="true"></up-upload>


					</uni-forms-item>
				</uni-forms>
				<button type="primary" @click="submit('valiForm')" style="background-color:#409Eff">提交</button>
			</view>
		</uni-section>
	</view>
</template>

<script>
	import {
		getContratDetails,
		uploadFile,
		setTemplateDC,
		addTemplateDC,
		getPersonalTemplateList
	} from '@/api/app.js'
	import {
		numberToChinese,
		getCurrentTime
	} from '@/utils/index.js'
	export default {
		data() {
			return {
				fileList: [],
				templateText: '',
				title: '',
				dataForm: {
					components: [],
					docTemplateId: '',
					docTemplateName: '',
					fileDownloadUrl: '',
					fileId: '',
					fileName: '',
					signFlowDescription: '',
					signFlowId: '',
					signFlowStatus: '',
					updateTime: '',

				},
				id: '',
				info: {},
				rules: {},
				selectedFile: '',
				customerName: '',
				phone: '',
				userId: '',
				userTemplete: []
			}
		},
		async onLoad(opt) {
			console.log(opt);
			if (opt) {
				this.userId = uni.getStorageSync('id')
				await this.getPersonalTemplateList()
				const title = decodeURIComponent(opt.title)
				this.title = title
				uni.setNavigationBarTitle({
					title
				})
				this.id = opt.id
				await this.getContratDetails(opt.id)
				this.dataForm.docTemplateId = opt.id
			}
		},
		methods: {
			// 获取模板标签
			async getPersonalTemplateList() {
				const res = await getPersonalTemplateList({
					id: this.userId
				})

				this.userTemplete = res.data
			},
			async afterRead(file) {
				console.log('file', file)
				const files = file.file
				console.log('files', files)
				this.fileList = [{
					url: files.url,
					type: files.type
				}]
				// 显示加载提示
				uni.showLoading({
					title: '上传中...',
					mask: true
				})

				uni.uploadFile({
					url: 'https://api.weijiashangejiance.com/api/EQB/UploadFile', //仅为示例，非真实的接口地址
					filePath: files.url,
					name: 'file',
					formData: {
						user: 'test'
					},
					success: (uploadFileRes) => {
						const resp = JSON.parse(uploadFileRes.data)
						if (resp.data) {
							this.dataForm.components.forEach(item => {
								if (item.componentType == "11") {
									item.componentValue = resp.data.fileId;
								}
							})
						}
						uni.hideLoading()
					},
					fail: (err) => {
						uni.hideLoading()
					}
				})
			},
			inputItem(value, item) {
				console.log(item);
				if (item.componentName.includes('客户提车时间：精准到年月日')) {
					const endTime = this.addYearsToChineseDate(item.componentValue, 3)
					console.log(endTime);

					this.dataForm.components.forEach(item => {
						if (item.componentName.includes('到期时间')) {
							item.componentValue = endTime
						}
					})
				}
			},
			addYearsToChineseDate(dateString, yearsToAdd) {
				console.log('收到', dateString, yearsToAdd);
				// 解析中文日期字符串
				const match = dateString.match(/(\d{4})年(\d{1,2})月(\d{1,2})日/);

				if (!match) {
					throw new Error('日期格式不正确，请使用 "YYYY年M月D日" 格式');
				}

				// 提取年、月、日（月份需要减1，因为Date中月份从0开始）
				const year = parseInt(match[1]);
				const month = parseInt(match[2]) - 1; // 重要：月份减1
				const day = parseInt(match[3]);

				// 创建Date对象
				const date = new Date(year, month, day);

				// 添加3年
				date.setFullYear(date.getFullYear() + yearsToAdd);

				// 格式化为中文日期字符串
				const newYear = date.getFullYear();
				const newMonth = date.getMonth() + 1; // 月份加1
				const newDay = date.getDate();

				return `${newYear}年${newMonth}月${newDay}日`;
			},
			async handleFileSelect(e) {

			},
			// 提交
			submit(ref) {
				this.$refs[ref].validate().then(async res => {
					for (let s of this.dataForm.components) {
						if (!s.componentValue) {
							uni.showToast({
								title: `请输入${s.componentName}`,
								icon: 'none'
							})
							return
						}
					}
					let customerName = ''
					let vin = ''
					// 获取当前表单的客户名字和车辆vin码
					this.dataForm.components.forEach((item) => {
						if (item.componentName.includes('客户名字') || item.componentName.includes(
								'客户姓名')) {
							customerName = item.componentValue
							this.customerName = item.componentValue
						}
						if (item.componentName.includes('车架号')) {
							vin = item.componentValue
						}

					})

					// 设置合同名字
					const templateName = `${this.title}_${customerName}_${vin}`
					console.log('设置合同名字', templateName);

					this.dataForm.fileName = templateName
					this.dataForm.docTemplateName = templateName
					console.log(this.dataForm);
					const resp = await setTemplateDC(this.dataForm)
					console.log(resp);

					if (resp.code === 0) {
						await this.addOrde(resp.data.fileId, this.dataForm.fileName, resp.data
							.fileDownloadUrl);
					} else {
						uni.showModal({
							title: "出错了",
							content: resp.message,
						})
					}
				}).catch(err => {
					console.log('err', err);
				})
			},

			isBool(str) {
				return str.includes('个人章')
			},

			async addOrde(fileId, signFlowTitle, url) {
				let order = {
					fileId,
					fileUrl: url,
					title: this.dataForm.fileName,
					name: this.customerName,
					phone: this.phone,
					memberId: uni.getStorageSync('id'),
					pdfId: this.id
				};

				const res = await addTemplateDC(order)
				if (res.code === 1) {
					uni.showToast({
						title: '提交成功',
						icon: 'none'
					})
					setTimeout(() => {
						uni.navigateBack()
					}, 1000)
				}
			},


			// 获取详情
			async getContratDetails(docTemplateId) {
				const userName = uni.getStorageSync('name')
				const mobile = uni.getStorageSync('mobile')
				const userRole = uni.getStorageSync('qx')


				const res = await getContratDetails({
					docTemplateId
				})
				if (res.message === '成功') {
					// let xsList = res.data.components.filter(item => item.componentType === '1')

					let xsList = res.data.components
					// 销售合同
					// if (this.title.includes('销售')) {
					this.dataForm.components = xsList.map((item) => {
						// 销售
						return {
							componentId: item.componentId,
							componentType: item.componentType,
							componentName: item.componentName,
							componentValue: item.componentType === '11' ? [] : '',
						}
					})

					this.dataForm.components.forEach((item) => {
						if (item.componentName === '销售姓名') {
							item.componentValue = userName
						}
						if (item.componentName === '经办人姓名') {
							item.componentValue = userName
						}
						if (item.componentName === '销售工作机号码') {
							item.componentValue = mobile
						}
					})

					this.dataForm.components = this.dataForm.components.filter((item) => {
						// 只保留 componentType 不等于 '6' 的元素
						return item.componentType !== '6';
					})
					// }

					this.info = res.data
				}

			},
			// 复制模板
			copyTemplate() {
				let template = ''
				if (this.title === '销售合同') {
					template = `车型：
车牌号：
成交价：
定金：
尾款：
车架号后6位：
发动机号：
过户次数：
按揭或全款：
贷款金额：
贷款期限：
客户姓名：
客户电话：
客户身份证号码：
商业险到期时间：
强险到期时间：
有无车衣或改色膜：
特别备注：`
				}

				if (this.title === '寄售合同') {
					template = `客户姓名（委托方）：
客户身份证号码：
客户电话：
车主姓名：
车牌号：
车架号：
发动机号：
注册日期：
品牌车型：
车身颜色：
行驶里程：
寄售价格（小写）：
寄售天数：
代理费、整备费（小写）：
备注：
签订时间：`
				}

				if (this.title === '采购合同') {
					template =
						`客户姓名：
身份证号码：
电话：
机动车所有人：
车牌号：
车架号：
发动机号：
品牌车型：
初始登记日期：
行驶里程：
车辆配置：
车辆颜色：
车辆登记证：
行驶证：
交强险：
钥匙：
车辆收购价格（小写）：
卖方已收到买方车款（小写）：
剩余尾款：
特别备注：
签订时间：`
				}

				if (this.title === '同行销售合同') {
					template = `车型：
车牌号：
成交价：
定金：
尾款：
车架号后6位：
发动机号：
过户次数：
客户姓名：
客户电话：
客户身份证号码：
强制险：
特别备注：`
				}

				if (this.title === '车辆质保合同') {
					template =
						`车辆VIN码：
车型：
发动机号：
车牌号：
表显里程：
姓名：
身份证号码：
手机号码：
保修起始日期：
保修到期日期：
保修起始里程：
保修到期里程：
签订日期：`
				}

				uni.setClipboardData({
					data: template,
					success() {
						uni.showToast({
							title: '复制成功',
							icon: 'none'
						})
					}
				})
			},
			// 粘贴识别
			pasteAndRecognize() {
				uni.getClipboardData({
					success: (res) => {
						this.templateText = res.data
						this.discernSalesContract(res.data)
					},
					fail(err) {
						console.log('err', err);
					}
				})
			},
			// 识别销售合同模板
			discernSalesContract(val) {
				// 使用正则表达式提取各字段
				const extractField = (fieldName) => {
					const regex = new RegExp(`${fieldName}：(.+)`);
					const match = val.match(regex);
					return match ? match[1].trim() : '';
				};

				const userCardNumber = this.userTemplete.find(item => item.name === '身份证号码')?.value
				const userName = uni.getStorageSync('name')
				const mobile = uni.getStorageSync('mobile')

				this.dataForm.components.forEach((item) => {

					console.log('componentName', item.componentName);
					console.log('componentValue', item.componentValue);



					if (this.title === '采购合同') {
						if (item.componentName.includes('买方姓名')) {
							item.componentValue = userName
						}
						if (item.componentName.includes('卖方姓名')) {
							item.componentValue = extractField('客户姓名')
						}
						if (item.componentName.includes('买方电话')) {
							item.componentValue = mobile
						}
						if (item.componentName.includes('卖方电话')) {
							item.componentValue = extractField('电话')
						}
						if (item.componentName === '行驶证车主姓名') {
							item.componentValue = extractField('机动车所有人')
						}
						if (item.componentName.includes('车牌号')) {
							item.componentValue = extractField('车牌号')
						}
						if (item.componentName.includes('车架号')) {
							item.componentValue = extractField('车架号')
						}
						if (item.componentName.includes('发动机号')) {
							item.componentValue = extractField('发动机号')
						}
						if (item.componentName.includes('行驶证登记日期')) {
							item.componentValue = extractField('初始登记日期')
						}
						if (item.componentName.includes('里程公里数')) {
							item.componentValue = extractField('行驶里程')
						}
						if (item.componentName.includes('品牌车型')) {
							item.componentValue = extractField('品牌车型')
						}
						if (item.componentName.includes('车辆颜色')) {
							item.componentValue = extractField('车辆颜色')
						}
						if (item.componentName.includes('登记证')) {
							item.componentValue = extractField('车辆登记证')
						}
						if (item.componentName === '行驶证：1或邮寄') {
							item.componentValue = extractField('行驶证')
						}
						if (item.componentName.includes('交强险')) {
							item.componentValue = extractField('交强险')
						}
						if (item.componentName.includes('钥匙')) {
							item.componentValue = extractField('钥匙')
						}
						if (item.componentName.includes('收购总价：XXX.XX元整。')) {
							item.componentValue = extractField('车辆收购价格（小写）')
						}
						if (item.componentName.includes('收购总价大写：XXX.XX元整。')) {
							item.componentValue = numberToChinese(Number(extractField('车辆收购价格（小写）')))
						}
						if (item.componentName.includes('已转定金：XXX.XX元整。')) {
							item.componentValue = extractField('卖方已收到买方车款（小写）')
						}
						if (item.componentName.includes('已转定金大写：XXX.XX元整。')) {
							item.componentValue = numberToChinese(Number(extractField('卖方已收到买方车款（小写）')))
						}
						if (item.componentName.includes('剩余尾款金额：XXX.XX元整。')) {
							// item.componentValue = numberToChinese(Number(extractField('剩余尾款')))
							item.componentValue = extractField('剩余尾款')
						}
						if (item.componentName.includes('特别备注说明：')) {
							item.componentValue = extractField('特别备注')
						}
						if (item.componentName.includes('签订日期')) {
							item.componentValue = getCurrentTime()
						}
						if (item.componentName.includes('买方身份证')) {
							item.componentValue = userCardNumber
						}
						if (item.componentName.includes('卖方身份证')) {
							item.componentValue = extractField('身份证号码')
						}
					}
					if (this.title === '寄售合同') {
						if (item.componentName.includes('车架号')) {
							item.componentValue = extractField('车架号')
						}
						if (item.componentName.includes('发动机号')) {
							item.componentValue = extractField('发动机号')
						}
						if (item.componentName.includes('车牌号')) {
							item.componentValue = extractField('车牌号')
						}
						if (item.componentName.includes('车身颜色')) {
							item.componentValue = extractField('车身颜色')
						}
						if (item.componentName.includes('品牌车型')) {
							item.componentValue = extractField('品牌车型')
						}
						if (item.componentName.includes('行驶里程')) {
							item.componentValue = extractField('行驶里程')
						}
						if (item.componentName.includes('寄售价格')) {
							item.componentValue = extractField('寄售价格（小写）')
						}
						if (item.componentName.includes('注册时间')) {
							item.componentValue = extractField('注册时间')
						}
						if (item.componentName.includes('行驶证车主姓名')) {
							item.componentValue = extractField('车主姓名')
						}
						if (item.componentName.includes('卖方身份证号')) {
							item.componentValue = extractField('客户身份证号码')
						}
						if (item.componentName.includes('卖方手机号码')) {
							item.componentValue = extractField('客户电话')
						}
						if (item.componentName.includes('寄售天数')) {
							item.componentValue = extractField('寄售天数')
						}
						if (item.componentName.includes('整备费用')) {
							item.componentValue = extractField('代理费、整备费（小写）')
						}
						if (item.componentName.includes('备注')) {
							item.componentValue = extractField('备注')
						}
						if (item.componentName.includes('注册日期')) {
							item.componentValue = extractField('注册日期')
						}
						if (item.componentName.includes('签订日期')) {
							item.componentValue = getCurrentTime()
						}

					}
					if (this.title === '销售合同') {
						if (item.componentName.includes('客户姓名')) {
							item.componentValue = extractField('客户姓名')
						}
						if (item.componentName.includes('客户身份证号码')) {
							item.componentValue = extractField('客户身份证号码')
						}
						if (item.componentName.includes('车牌号')) {
							item.componentValue = extractField('车牌号')
						}
						if (item.componentName.includes('品牌车型')) {
							item.componentValue = extractField('车型')
						}
						if (item.componentName.includes('车架号')) {
							item.componentValue = extractField('车架号后6位')
						}
						if (item.componentName.includes('发动机号')) {
							item.componentValue = extractField('发动机号')
						}
						if (item.componentName.includes('过户次数')) {
							item.componentValue = extractField('过户次数')
						}
						if (item.componentName.includes('总价小写')) {
							item.componentValue = extractField('成交价')
						}
						if (item.componentName.includes('总价大写')) {
							item.componentValue = numberToChinese(Number(extractField('成交价')))
						}
						if (item.componentName.includes('已收到定金小写')) {
							item.componentValue = extractField('定金')
						}
						if (item.componentName.includes('剩余尾款金额小写')) {
							item.componentValue = extractField('尾款')
						}
						if (item.componentName.includes('贷款或全款')) {
							item.componentValue = extractField('按揭或全款')
						}
						if (item.componentName.includes('贷款金额以万为单位')) {
							item.componentValue = extractField('贷款金额')
						}
						if (item.componentName.includes('贷款期数')) {
							item.componentValue = extractField('贷款期限')
						}
						if (item.componentName.includes('有或无车衣或改色膜')) {
							item.componentValue = extractField('有无车衣或改色膜')
						}
						if (item.componentName.includes('合同签订时间')) {
							item.componentValue = getCurrentTime()
						}
						if (item.componentName.includes('强制性到期时间')) {
							item.componentValue = extractField('强险到期时间')
						}
						if (item.componentName.includes('商业险到期时间')) {
							item.componentValue = extractField('商业险到期时间')
						}
						if (item.componentName.includes('特别备注')) {
							item.componentValue = extractField('特别备注')
						}
					}
					if (this.title === '同行销售合同') {
						if (item.componentName.includes('客户姓名')) {
							item.componentValue = extractField('客户姓名')
						}
						if (item.componentName.includes('身份证号')) {
							item.componentValue = extractField('客户身份证号码')
						}
						if (item.componentName.includes('车牌号')) {
							item.componentValue = extractField('车牌号')
						}
						if (item.componentName.includes('品牌车型')) {
							item.componentValue = extractField('车型')
						}
						if (item.componentName.includes('车架号')) {
							item.componentValue = extractField('车架号后6位')
						}
						if (item.componentName.includes('发动机号')) {
							item.componentValue = extractField('发动机号')
						}
						if (item.componentName.includes('过户次数')) {
							item.componentValue = extractField('过户次数')
						}
						if (item.componentName.includes('总价小写')) {
							item.componentValue = extractField('成交价')
						}
						if (item.componentName.includes('总价大写')) {
							item.componentValue = numberToChinese(Number(extractField('成交价')))
						}
						if (item.componentName.includes('收到全款金额小写')) {
							item.componentValue = extractField('定金')
						}
						if (item.componentName.includes('合同签订时间')) {
							item.componentValue = getCurrentTime()
						}
						if (item.componentName.includes('特别备注')) {
							item.componentValue = extractField('特别备注')
						}
					}
					if (this.title === '车辆质保合同') {
						if (item.componentName.includes('车架号')) {
							item.componentValue = extractField('车辆VIN码')
						}
						if (item.componentName.includes('品牌车型')) {
							item.componentValue = extractField('车型')
						}
						if (item.componentName.includes('发动机号')) {
							item.componentValue = extractField('发动机号')
						}
						if (item.componentName.includes('车牌号')) {
							item.componentValue = extractField('车牌号')
						}
						if (item.componentName.includes('客户身份证号码')) {
							item.componentValue = extractField('身份证号码')
						}
						if (item.componentName.includes('客户姓名')) {
							item.componentValue = extractField('姓名')
						}
						if (item.componentName.includes('保修起始公里数')) {
							item.componentValue = extractField('保修起始里程')
						}
						if (item.componentName.includes('到期公里数')) {
							item.componentValue = extractField('保修起始里程') * 1 + 90000
						}
						if (item.componentName.includes('客户手机号码')) {
							item.componentValue = extractField('手机号码')
						}
						if (item.componentName.includes('客户提车时间：精准到年月日')) {
							item.componentValue = extractField('保修起始日期')
						}
						if (item.componentName.includes('到期时间（提车时间加3年）：精准到年月日')) {
							item.componentValue = extractField('保修到期日期')
						}
						if (item.componentName.includes('到期公里数：提车公里数加90000公里')) {
							item.componentValue = +extractField('表显里程') + 90000
						}
						if (item.componentName.includes('签订时间')) {
							item.componentValue = getCurrentTime()
						}
						if (item.componentName.includes('提车时公里数')) {
							item.componentValue = extractField('表显里程')
						}
					}
				})



			}
		}
	}
</script>

<style scoped lang="scss">
	.contract-details {
		padding: 20rpx 30rpx;
		min-height: 100vh;
		box-sizing: border-box;

		.paste {
			margin-bottom: 20rpx;
			padding: 20rpx;
			border-radius: 10rpx;
			background-color: #ffffff;

			.btns {
				padding-top: 20rpx;
				text-align: end;
			}
		}

		.form {
			margin-top: 20rpx;
			padding: 20rpx;
			border-radius: 10rpx;
			background-color: #ffffff;
		}
	}
</style>